/**
 * 
 */
package com.leehom.arch.base.reportquery.config;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.leehom.arch.base.reportquery.dynsql.DynSql;
import com.leehom.arch.base.reportquery.dynsql.SqlPiece;
import com.leehom.arch.base.reportquery.dynsql.option.Option;
import com.leehom.arch.base.reportquery.dynsql.option.support.IsNotNull;
import com.leehom.arch.base.reportquery.dynsql.option.support.IsNull;
import com.leehom.arch.base.reportquery.dynsql.option.support.order.OrderByASC;
import com.leehom.arch.base.reportquery.dynsql.option.support.order.OrderByDESC;
import com.leehom.arch.base.reportquery.dynsql.option.support.tree.IsNotTree;
import com.leehom.arch.base.reportquery.dynsql.option.support.tree.IsTree;
import com.leehom.arch.base.serializer.Serializer;
import com.leehom.arch.base.serializer.xstream.XmlSerializerXStreamImpl;

/**
 * @类名: DynsqlBeanConfig
 * @说明: 
 *
 * @author   leehom
 * @Date	 2019年10月8日 下午4:21:34
 * 修改记录：
 *
 * @see 	 
 */
@Configuration
public class DynsqlBeanConfig {

	// 动态sql序列化器
	@Bean
	public Serializer dynSqlSerializer() {
		XmlSerializerXStreamImpl ser = new XmlSerializerXStreamImpl();
		// typeAlias
		Map<String, Class> typeAlias = new HashMap<String, Class>();
		// 可选项
		typeAlias.put("option", Option.class);
		// 
		typeAlias.put("options", List.class);
		// sql可变快
		typeAlias.put("sqlPiece", SqlPiece.class);
		// 
		typeAlias.put("dynSql", DynSql.class);
		//
		typeAlias.put("dynSqls", Map.class);
		// null断言
		typeAlias.put("IsNotNull", IsNotNull.class);
		typeAlias.put("IsNull", IsNull.class);
		// tree断言
		typeAlias.put("IsTree", IsTree.class);
		typeAlias.put("IsNotTree", IsNotTree.class);
		// order断言
		typeAlias.put("OrderByASC", OrderByASC.class);
		typeAlias.put("OrderByDESC", OrderByDESC.class);
		// true/false断言
		// 。。。
		//
		ser.setTypeAlias(typeAlias);
		// 转换器
		// 。。。
		return ser;
	}
	
}
